import { Global, Module } from '@nestjs/common';
import type { GlobalConfig, HttpOptions } from './interfaces/config.interface';

/**
 * 全局配置模块
 *
 * 使用 @Global() 装饰器使得这个模块中的提供者在整个应用中全局可用
 * 其他模块无需显式 import 就可以注入这些提供者
 *
 * 适用场景：
 * - 应用级别的配置（如应用名称、版本、环境变量）
 * - 全局通用的服务（如日志服务、HTTP 客户端配置）
 */
@Global()
@Module({
	providers: [
		// 全局应用配置
		{
			provide: 'GLOBAL_CONFIG',
			useValue: {
				appName: 'NestJS Cat Management System',
				version: '1.0.0',
				environment: 'development',
				author: 'NestJS Learner',
				description: '这是一个学习 NestJS 模块化和依赖注入的示例项目',
			} as GlobalConfig,
		},

		// 全局 HTTP 配置
		{
			provide: 'HTTP_OPTIONS',
			useValue: {
				timeout: 5000,
				maxRedirects: 5,
				retryAttempts: 3,
				baseURL: 'https://api.example.com',
			} as HttpOptions,
		},
	],
	exports: [
		'GLOBAL_CONFIG', // 导出全局配置
		'HTTP_OPTIONS', // 导出 HTTP 配置
	],
})
export class GlobalConfigModule {
	constructor() {
		console.log('🌍 全局配置模块已加载');
	}
}
